home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 22
/
freelog 22.iso
/
Prog
/
Djgpp
/
GPC2952B.ZIP
/
info
/
gpc.i17
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
GNU Info File
|
2001-02-09
|
37.3 KB
|
1,008 lines
This is gpc.info, produced by makeinfo version 4.0 from gpc.texi.
INFO-DIR-SECTION GNU programming tools
START-INFO-DIR-ENTRY
* GPC: (gpc). The GNU Pascal Compiler.
END-INFO-DIR-ENTRY
INFO-DIR-SECTION Individual utilities
START-INFO-DIR-ENTRY
* GPC: (gpc)Invoking GPC. The GNU Pascal Compiler.
END-INFO-DIR-ENTRY
This file documents the GNU Pascal Compiler.
Copyright (C) 1988, 1996-2001 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "GNU General Public License", "The GNU
Project", "The GNU Manifesto" and "Funding for Free Software" are
included exactly as in the original, and provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the sections entitled "GNU General Public
License", "The GNU Project", "The GNU Manifesto" and "Funding for Free
Software" and this permission notice, may be included in translations
approved by the Free Software Foundation instead of in the original
English.
File: gpc.info, Node: Mailing List Archives, Next: Newsgroups, Prev: Mailing List, Up: Support
The GPC Mailing List Archives
=============================
Perhaps your problem was already discussed on the list. There is a
searchable archive of the mailing list on the WWW. It can be browsed or
searched at `http://www.gnu.de/archive/wilma.cgi/gpc'.
The archive of the GPC announcement list is at
`http://www.gnu.de/archive/wilma.cgi/gpc-announce'.
_Note:_ Currently, the search option is working fine. If you find it
broken, please email me at <anja@drewitz.de>. Please don't mail a copy
to the GPC list because I let procmail move all mails with `To: gpc...'
and `Cc: gpc...' to a separate folder and would not see your mail for a
long time. -- Anja
This archive starts in June 1999. For older messages, see:
`ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1998.gz'
(513 kB)
`ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1997.gz'
(995 kB)
`ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1996.gz'
(154 kB)
`ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/misc/gpc-list-1995.gz'
(42 kB)
There is also a HTML version of these older archives at
`http://www.iula.upf.es/altres/pub/gpc/list2html/gpclist.htm'.
File: gpc.info, Node: Newsgroups, Next: Professional Support, Prev: Mailing List Archives, Up: Support
Newsgroups relevant to GPC
==========================
To get support, you can also ask the Usenet newsgroups for help.
There are several Pascal related newsgroups, but none is dedicated just
to GNU Pascal, so use the one which is most appropriate for your
problem. For general Pascal questions, we recommend the following one:
`news://comp.lang.pascal.misc' Pascal in general and ungrouped
Pascals.
Pascal syntax related questions may be appropriate in:
`news://comp.lang.pascal.ansi-iso' Pascal according to ANSI and ISO
standards.
The next newsgroup is a haven for beginners, answering questions
that would apply to almost any Pascal. However, if you have a
GPC-specific question don't post there - use the GPC mailing list. And
when in doubt use the GPC mailing list.
`news://comp.lang.pascal.borland' Borland Pascal questions.
Don't forget to give back what you have obtained. None of us is
getting money for answering your questions (unless you pay us by
yourself). Please do your part by answering the questions of others
instead.
File: gpc.info, Node: Professional Support, Next: Compiler Crashes, Prev: Newsgroups, Up: Support
Where to get individual support for GPC
=======================================
GPC is free software and comes *without any warranty*.
If you want to get professional support, you can hire an individual
or a company for providing such a service.
G-N-U GmbH (http://www.g-n-u.de) is doing large parts of the
development of GNU Pascal. This company offers special support for GPC
and can be contacted at <info@g-n-u.de>.
More generally, to find a company or an individual who offers
support and other consulting services for free software, look into the
GNU Service Directory (http://www.gnu.org/prep/service.html).
File: gpc.info, Node: Compiler Crashes, Next: Reporting Bugs, Prev: Professional Support, Up: Support
If the compiler crashes...
==========================
If the compiler crashes, you have discovered a bug. A reliable
compiler never crashes. To help the maintainers fix this bug, it is
important that you send us a problem report.
If you're on Unix, you can find out where the compiler crashed if
you enable coredumps, then load the compiler (`gpc1') plus the core
file in the debugger (`gdb /your_path_here/gpc1 core'), then type
`backtrace' to get a stacktrace. Include this stacktrace in your bug
report.
File: gpc.info, Node: Reporting Bugs, Next: Testing, Prev: Compiler Crashes, Up: Support
How to report GPC bugs
======================
If you encounter a bug with GPC, please check whether it is one of
the known bugs (*note Known Bugs::). If not, please report it to the
GNU Pascal mailing list (*note Mailing List::). That way, they always
reach the maintainers. Please note the following points.
* Please send a description of the problem. Try to give as much
information as possible, with the full text of any error messages
encountered, or a description of how some output varies from the
expected output. Always specify the operating system type with
version and the machine type (try `uname -a' if unsure) as well as
the version of GPC as printed by `gpc -v'.
* A good article on submitting bug reports can be found at either
`http://www.chiark.greenend.org.uk/~sgtatham/bugs.html' or
`http://freshmeat.net/news/2000/02/26/951627540.html'
If the problem is with the compiler itself, not an installation
problem or something like this, please provide a test program to
reproduce the problem, and note the following hints. You can also
contribute test programs for features that are working in GPC to ensure
they will not break in future releases.
* The test program should be as short as possible, but *by all
means*, please send a *complete* program and *make sure* that it
still reproduces the problem before you send it. Too often, users
have sent code which contained obvious syntax errors far before
the actual problem, or just code fragments we could only make wild
guesses about. This is unproductive for us and doesn't help you
get your problem solved.
The preferred form for test programs is the form that the automated
GPC Test Suite understands. Please, if at all possible, send your test
programs in this form which should be easy to do, so we won't have to
waste our time to bring them into this form, and can concentrate on
fixing the problem.
* The file containing the main program must contain the keyword
`program' (case-insensitively) to be recognized by the testing
script. Other files, which can contain units or modules or data
needed by the program, must not contain the word `program'.
* Since the Test Suite must run under very ... nah ... strange
operating systems, too, file names must be distinguished in their
first eight characters (case-insensitively) and should not contain
anything but letters, numbers, hyphens, underscores and a single
dot. The extension must be `.pas' to be recognized by the testing
script. Furthermore, any ancillary files (units, modules,
includes, data files) should not be longer than "8+3" characters.
It is often a good idea to use your name, nickname or initials
followed by a number as the file name.
* The test program, when run, should produce a line of output
consisting of the string `OK' (followed by a newline) if
everything went as expected, and something else (e.g. `failed',
possibly followed by the reason of failure) if something went
wrong.
* However, if the program is intended to check whether GPC catches an
(intentional) error in the program, place the string `WRONG'
somewhere in the test program, preferably in a comment in the line
that contains the intentional error, and make the program output
`failed' or something like this if it does compile mistakenly.
The following special features of the testing script may be helpful
for constructing tests:
* If the expected output is something else than `OK', place it in a
file `<basename>.out' (where `<basename>' is the name of the test
program without the `.pas' extension).
* If the test program expects some input, place it in a file
`<basename>.in'. It will automatically be redirected to the
program's standard input.
* If the test needs some special flags to be given to the GPC command
line, place them in a comment preceded by `FLAG', e.g.:
(* FLAG --extended-pascal -Werror *)
* The source file name of the test program will be passed as the
first command-line argument to the test program run.
* If a test needs to be run in a special way, you can accompany the
program with a script `<basename>.run' that will do the actual
test after the test program was compiled. This script will be run
by `sh' (regardless of its first line). In order to be portable,
it should only use standard tools. The source file name of the test
program will be passed as the first command-line argument to the
run script in this case. The compiled file is always called
`a.out'.
* If a test needs to be compiled in a special way (e.g., to decide
whether to skip the test), place the commands in a script
(preferably called `<basename>.cmp'), and put the file name of the
script (without directory) in a comment preceded by `COMPILE-CMD:'
into the source of the test program. The compile script will be
run *instead* of any other action for this test program, so it
gives you maximum flexibility to do whatever you need to do. This
script will be run by `sh' (regardless of its first line). In
order to be portable, it should only use standard tools. The
first command-line argument to the compile script will be the
compiler to use, including all options. The second argument will be
the source file name of the test program. For some typical tests,
there are standard compile scripts, e.g. `i386.cmp' which will
skip the test unless run on an i386 compatible processor. This is
necessary, e.g., when testing assembler code. Of course, it's still
better to avoid having to use such scripts when possible.
File: gpc.info, Node: Testing, Prev: Reporting Bugs, Up: Support
Running the GPC Test Suite
==========================
_Note:_ If you have installed a GPC binary distribution, you usually
don't have the Test Suite installed (you can download the GPC source
distribution to get it, however), so this section does not apply to
you. Still, you can find in the section `Contributing Tests to the Test
Suite' how to report GPC bugs in the form of new test programs so we
can fix them as fast as possible.
The files in the test directory and subdirectories are for testing
GPC only and should not be of any other use.
Note: A few of the tests do not make sense on all systems. They are
equipped with checks and will be skipped if they find the system not
suitable. Skipped tests do *not* indicate a GPC bug, unless you have a
reason to be sure that the particular test should make sense on your
system.
* To run the whole Test Suite, type `make' in the test directory (or
`make check' in the `p' object directory after building GPC).
* The output will show all errors encountered (hopefully none) and
tests skipped, and finally display a summary giving the number of
successful, failed and skipped tests. Any failed test indicates a
bug in GPC which should be reported to the GPC mailing list,
<gpc@gnu.de>. Don't forget to mention the operating system you ran
the test on and any other relevant information about what you did.
* You can also type `make pascal.check-long' to get a long output
which is a sequence of file names followed by `OK' for successful
tests, `SKIPPED' for skipped tests (both in capital letters), and
anything else for failed tests.
* To run only some of the tests, you can type something like `make
MASK="foo[1-7]*.pas"' or `make MASK="foo42.pas" pascal.check-long'.
* To clean up after running the tests, type `make clean'.
File: gpc.info, Node: To Do, Next: Internals, Prev: Support, Up: Top
The GNU Pascal To-Do List.
**************************
This is the To-Do list for the GNU Pascal Compiler.
The GNU Pascal development team is constantly working on making GNU
Pascal more reliable and more comfortable. However, there are some
known bugs which will take some time to be fixed (any help welcome!),
and we do not want to hide them from you. You might also be interested
to know what features are planned to be implemented in the future. This
list is meant to keep track of the known bugs and wanted features of
GPC.
If you want to report a new bug or suggest a new feature, the best
way to do it is in the mailing list. This way, other GPC users can
provide additional ideas, perhaps work-arounds for bugs, and the GPC
maintainers can sooner start to think about how to solve the problem.
The GPC mailing list is <gpc@gnu.de>. To subscribe, send the command
`subscribe gpc your@email.address' in the body of a mail to
<majordomo@gnu.de> (the subject is ignored). An archive of the mailing
list can be found on the GPC home page.
The list changes every few days. The present version refers to the
current GPC snapshot, version 20010208.
This list is part of the GNU Pascal Manual, included in GPC
distributions and snapshots. You can always browse the most current
version of the list on GPC's WWW page in HTML. If you check the To-Do
list regularly you can decide if and when to try a new snapshort.
* Menu:
* Known Bugs:: Known bugs in GPC
* Planned Features:: Features planned for GPC
* Done:: Fixed bugs and implemented features
File: gpc.info, Node: Known Bugs, Next: Planned Features, Up: To Do
Known bugs in GPC
=================
In the following sections, you can find information about GPC bugs
that are known to the developers. The list always corresponds to the
latest developer versions of GPC, usually not to the latest official
distribution.
If you encounter a bug with GPC, please check whether it is one of
the known bugs. If not, report it to the GNU Pascal mailing list. (But
always report it if you solve the problem! ;-)
Entries will be removed from the list as soon as the problem is
solved in the developers' current GPC version. (Exception: If we can't
reproduce the problem, but someone else can, the entry will be removed
when we hear from this person that the problem is solved.) Problems
which are announced to be solved, but for which we (or the person who
can reproduce the problem) did not get the proof (i.e., a GPC source
patch) yet, are marked `(ok)'.
A message ID (like `<42@foo.bar>') refers to a message in the GPC
mailing list (or a newsgroup, denoted with `news:') where the topic was
discussed (often a bug report). A note of the form `(xy20001231)'
refers to an internal message of the GPC developers. A file name like
`(foo42.pas)' refers to the according program in the GPC test suite
included in the GPC source distribution.
* Menu:
* Urgent:: Things left to do until the next release of GPC
* Bugs:: Other known bugs in GPC
File: gpc.info, Node: Urgent, Next: Bugs, Up: Known Bugs
Things left to do until the next release of GPC
-----------------------------------------------
Bugs:
* infinite compiler recursion when a unit uses itself (sven18.pas)
<3A2275D8.F2DEA31A@zkm.de>
* GPC crashes in the presence of old gpi files
<3A2275D8.F2DEA31A@zkm.de>
* the operators `pow', `**', etc. cannot be redefined (maur7.pas)
* enumeration types declared within a set or record type or variable
or constant declaration or the case selector of a record within a
unit are not visible in the main program (fjf211.pas,
fjf239[ab].pas)
* enumeration types do not always properly survive transport through
two interfaces (russell2.pas, miguel2.pas, daj2.pas)
* some functions in boolean shortcuts are always called
(fjf226[a-\infty].pas)
* possible stack overflow when using string expressions in a loop
(fjf419.pas)
* GPC sometimes crashes with `-g'
<Pine.SGI.4.10.9903231101500.6691-100000@pugh.bip.bham.ac.uk> (ok?)
Wanted features:
* make it possible to declare routines as I/O critical
* `gp' make utility to replace automake; compile and link programs,
but compile units without linking and without a warning that there
is nothing to link; store GPC version numbers, platform and
options in GPD files and re-compile automatically in `--automake'
mode when they don't match; `--library-path' and `--include-path'
as synonyms for (multiple) `-L' and `-I' options
File: gpc.info, Node: Bugs, Prev: Urgent, Up: Known Bugs
Other known bugs in GPC
-----------------------
* methods returning records don't work (chief39.pas)
* bugs with packed subranges (couper[1-3].pas)
* `setlimit' is applied when it shouldn't be ((a) variable/constant
declarations, (b) `set of ShortCard', (c) constant sets), fatal
range overflows in set constructors (couper8.pas, couper10.pas)
<2C4F3FEF.20000809173117.FOO-13A6.frank@g-n-u.de>
* string types declared in modules don't always work (daj3.pas)
* declaring a procedure in the implementation with the same name as
an imported procedure doesn't work (chief18.pas), detect name
collisions between imported EP modules (mod9.pas)
* don't allow assigning a pointer to a schema to a variable of type
pointer to discriminated schema with different discriminant
(fjf130.pas)
* global dynamic variables (john1.pas) and global variables
initialized by a function (fjf210b.pas) don't work
* check for using, incrementing, ... unused variables
<199711270257.VAA06393@mint.mint.net> (kevin2.pas), especially for
strings, also for `for'-loop counters after the loop (EP 6.8.1)
and modifying `for'-loop counters within the loop or in local
routines <200005240807.EAA05355@mail.bcpl.net>
* dynamic sets don't work (->PPS)
* there are some bugs with mathematical functions. GPC fails, for
example, the Paranoia test.
* the compiler does not always recover well after a parse error
<199911040915.KAA11168@humulus.daimi.au.dk>
* type problem with const/protected integer parameters (chief31.pas)
* bug with const parameters and derived object types (tc19991003)
* give a warning rather than an error (and nothing in
`--borland-pascal') when assigning/passing by value an object of
derived type to one of a base type (and change the VMT pointer in
the destination/actual parameter), don't change the VMT pointer
when assigning to a polymorphic object (chief35[ab].pas,
fjf451*.pas)
* `prior parameter's size depends on `foo'' error with protected
string parameters (daj1.pas)
* declarations of subranges of enumeration types cause `conflicting
types' messages (drf8.pas)
* file parameters must not automatically be bindable in
`--extended-pascal' (fjf193c.pas)
* automatically close dynamically allocated files on dispose and
files declared in a statement block at the end of the statement
block (fjf219[a-c].pas); handle variant records correctly
<6r9ir5$7v5$1@nntpd.lkg.dec.com> (fjf219d.pas); close files before
gotos out of their scope (fjf219[ef].pas)
* const real parameters don't work (fjf228.pas)
* arithmetic expressions don't work as lower array/subrange bounds
(fjf248.pas)
* identifiers declared in a unit that have the same name as some
object method are not visible (fjf278.pas, russell2.pas)
* pointers to objects returned by methods can't be dereferenced
(fjf299.pas)
* integer parameters to built-in routines are not always converted
to the right type (fjf349.pas)
* types declared in a module interface are not visible in the
implementation (kevin13.pas)
* procedural variables are always passed by value
<ABcLeYr887@e00827.vno.lt> (marius1.pas)
* `inline' and `asmname' don't work together if compiling without
optimization (maur3.pas)
* module bug (mod12.pas)
* Read, ReadStr and Val for all integer, real, char and string
types; [no-]read-range-checking (also for subtypes of char!),
[no-]read-base-specifier, [no-]read-white-space (not in Val!)
(read?.pas)
* fixed string comparisons are wrong (takashi1.pas)
* char fields of packed records don't work in read (tom5.pas)
* count of parameters to methods in error messages should not
include Self
<8F990E3D9A6FD1118F3B0000F81EA1D84985CE@exchsa2.dsto.defence.gov.au>
* bug on machines with strict alignment requirements
<199906021618.MAA06228@sten27.software.mitel.com>
* too many parameters to `New' are not checked
* `MedInt' (and therefore SizeType under DJGPP) is not accepted as
the 4th parameter to BlockRead, BlockWrite (fjf252.pas)
* compilation of interface declarations takes quadratic time
* installation: bug(s) in GPC's makefiles; Make-lang.in is missing a
rule so GPC can't be built without building GCC
* forward referencing pointers generate debug info that appears as
generic pointers; no information of `with' statements is currently
given to the debugger; error in debug entries generated for
objects
<8F990E3D9A6FD1118F3B0000F81EA1D84985D7@exchsa2.dsto.defence.gov.au>
* problems with initialising sets to the empty set
<onOioOAQz365EwbY@tcs02.demon.co.uk>
* Solaris: the preprocessor doesn't understand `defined'
(fjf266.pas,fjf238.pas)
<19990129132623.21658.qmail@euler.stams.strath.ac.uk>
* HP/UX: `unrecognizable insn' error in connection with conformant
or const string parameters)
<199809280741.JAA17719@rug105.cs.rug.nl> (sietse1.pas),
<Pine.SOL.4.10.9908051751550.23095-100000@niflheim.rutgers.edu>,
<396C3531.3A327722@cs.rug.nl>
File: gpc.info, Node: Planned Features, Next: Done, Prev: Known Bugs, Up: To Do
Features planned for GPC
========================
In the following sections, you can find informations about features
which have been suggested and/or discussed for inclusion into GPC,
usually in the GPC mailing list. The division into the sections and the
names of the sections may change when this seems useful. The entries
within each section are in no particular order.
Some of the entries may be a bit difficult to read. Double question
marks (`??') within the entries mean that it's not yet clear how to do
the thing. Triple question marks (`???') mean that it's not clear
whether to do it at all. ;-)
* Menu:
* Planned - Strings:: String types
* Planned - Records/arrays:: Record and array types
* Planned - Files:: Files
* Planned - Other types:: Other types
* Planned - Units and modules:: Units and modules
* Planned - OOP:: Object oriented programming extensions
* Planned - Misc:: Miscellaneous GPC topics
* Planned - Utilities:: Useful utilities for GPC
File: gpc.info, Node: Planned - Strings, Next: Planned - Records/arrays, Up: Planned Features
Planned features: Strings
-------------------------
* const/var `AnyString' parameters and pointers (records internally,
cf. gpc.pas) (GetCapacity; only for var parameters)
* `SetLength' for non-Pascal string types; use truncate-flag
* make work on all string types: string functions from
rts/gstrings.pas, Concat/+ (function with conformant array;
Optimize `s := s + ch') (fh19971105)
* new option `--arrays-of-char-as-cstrings={none,zero-based,all}' to
allow assigning [zero-based] arrays of char to cstring variables
(warning otherwise) (cstrini2.pas); make padding of those arrays
in initialized variables and in assignments dependent on this
switch (fh19970921) (fjf57.pas, ok) and if the length matches
exactly, give a warning (fh19971013) (cstrassign.pas); pass those
arrays as cstrings in read*, write*, str (P_*STRING; current
length=-1 in two places); compile time warning (and treatment as
non-zero-based) if it's not clear at compile time if a conformant
array or schema is zero-based or not, and an operation depends on
this in the zero-based state
* Short strings (Length, Capacity) and switches
(tc19980326.2,tc19980327); allow `type x=string' (undiscriminated)
when switch is set so that strings don't default to length 255
(fh19971113) (fjf97.pas, ok); don't add a #0 terminator when
passing as a CString parameter (automatically use String2CString)
* automatically convert CStrings to Strings?
* optimize assignment of and (non-trimming) comparison with a
constant empty string
* general switch `--bp-strings'
* offer trimming string relations as functions
* undiscriminated strings -> remove pointers to string constants
* `WriteStr'-like function
* unused local variables of string types are not detected
* wide characters
* open array/string parameters (`$P', `$V' in BP; undocumented
`OpenString' identifier in BP)
File: gpc.info, Node: Planned - Records/arrays, Next: Planned - Files, Prev: Planned - Strings, Up: Planned Features
Planned features: Records/arrays
--------------------------------
* array/record initializers: recognize indices and field names
(sven4.pas), ISO structured constants (constdef.pas); variant
records <C1256791.0021F002.00@synln01.synstar.de>; allow omitting
fields; fields in arbitrary order ???; index/field name optional;
arrays: warning/error when too few fields are given; initialized
schemata
* initialized types in records/arrays (inirec[24].pas)
* when applying `New' to a variant record type with a selector
given, only allocate the space necessary for the selected variant
(varrec2.pas)
* Oregon and Vax Pascal structured constants
<80256540.005E7D08.00@buffer1.quantel.com> ???
* automatically detected upper array bounds in structured
constants/intialized variables (-> PXSC)
* simplify code generated to compute size of dynamical variables if
no bitfields are involved
* tagging feature for with statements (Sun Pascal) (tom6.pas)
<200012022215.eB2MFD614424@wsinpa16.win.tue.nl>
* transpose arrays (Fortran)? <news:918557$mke$1@nnrp1.deja.com>
File: gpc.info, Node: Planned - Files, Next: Planned - Other types, Prev: Planned - Records/arrays, Up: Planned Features
Planned features: Files
-----------------------
* AnyFile parameters and pointers
* keep files in FDRList while they live, not only while they're
open, so _p_fdrdone() can be applied to all of them
* packed files (EP) ??
* write: left/center/both(?) justification???; rounding (PXSC) ???
* BlockRead, BlockWrite: make last parameter internally a function
result and allow any integer type to be passed for it for
compatibility with 16 bit BP code
* improve TFDDs (also for typed and untyped files)
(OpenProc/CloseProc)
* read/write operators ???
* let Assign call _p_initfdr() in `--borland-pascal'
File: gpc.info, Node: Planned - Other types, Next: Planned - Units and modules, Prev: Planned - Files, Up: Planned Features
Planned features: Other types
-----------------------------
* read Booleans and enum types from files, write enum types to files
* UCSD Pascal's `Integer[n]' ??? BCD?
* enum types with specified values ???; Inc, Pred, ... ??
* enum type extensions (syntax??)
* check for dereferencing nil pointers
* general subtypes ???
* type cast operators ???
* make `SizeOf' work on specially declared untyped var and const
parameters (`AnyType'?)
* sparse sets; sets of arbitrary types ?? ???
* optimize set constructors even better ???
* superfluous warning with sets and variable elements (fh19970928)
* variables of type undiscriminated schema; functions returning
undiscriminated schemata (pg19980813.3)
* record and array values (EP)
* initalization and finalization code for arbitrary types (e.g. GMP
types)
* give an error rather than a warning when casting between types of
different size in {$X-}
* storage class qualifiers (`external', `asmname', `static',
`volatile', `attribute')
* `SELECTED_REAL_KIND' for real types (cf. Fortran, drf) ?? ???
* resize schemata (cf. `SetLength' in Delphi)
File: gpc.info, Node: Planned - Units and modules, Next: Planned - OOP, Prev: Planned - Other types, Up: Planned Features
Planned features: Units and modules
-----------------------------------
* qualified identifiers <34508F33.4F685BD1@keele.ac.uk> (also
`program_name.identifier'?) (problem module.id vs. record.field);
also for operators; `gpc' for built-in identifiers; duplicate
identifiers in different units (fjf260[ab].pas); giving the same
name to a routine in an interface and a local routine doesn't work
(fjf240.pas); don't capitalize variable names in error messages
and file name queries (store the casing of the first occurrence of
an identifier)
* `external name', `asmname', ...; (-> BP, Delphi) ??, like `$L'
(fh19990325.2)
* modules without implementation ??? (pmod1.pas)
* `asmname' for units
* `gpc-main' in GPI files
* qualified import (mod10.pas)
* units without initialization code or variables needing
initialization should not get a constructor
* GPI format ??
* inline functions in GPI files
* unit inheritance (of a complete interface with one statement or
selectively)
<Pine.HPP.3.96.971105161603.28577A-100000@tea.geophysik.tu-freiberg.de>,
<199711061008.LAA25341@agnes.dida.physik.uni-essen.de> ??; virtual
procedures ???
* allow accessing non-exported identifiers in the implementation of
a module ???
<Pine.BSI.3.96.971110210330.7570A-100000@malasada.lava.net>
* `Initialization/Finalization' (Delphi: =`to begin/end do') (???)
(only in `--delphi'?)
File: gpc.info, Node: Planned - OOP, Next: Planned - Misc, Prev: Planned - Units and modules, Up: Planned Features
Planned features: OOP
---------------------
* init VMT (fjf445*.pas)
* published, public, protected, private (scope limited to a unit in
`--borland-pascal', and to the object type normally)
* `ProcVar := Obj.Method' {$X+}
* VMT link (global, local, new: set to 0 or @VMT; destructor: reset
to 0)
* checks: @object<>nil, typeof(object)<>0, size=-negsize; separate
switches; function initialized (that does these 3 tests) ???
* virtual constructors
* `OBJ is CLASS', type cast
* `is_exactly' (instead of `TypeOf (OBJ) = TypeOf (CLASS)' ???
* `CLASS is CLASS' (implemented in Pascal with `Parent')
* `OBJ is INTERFACE' (not so easy?) ???
* abstract methods, object types
* allow method-implementation right after the declaration ???
* friends ???
* `dynamic' (= `virtual' ?)
* `class' (reference to an object type); allow classes and object
types to inherit from each other; OOE;
<01BD7A3A.6B187A20.prucha@helicon.co.at>; obpascal.zip
* `New': Delphi syntax; Dispose?? (automatically?; set references
automatically to nil) (-> FPC)
* `--base-class=foo', `--base-object=bar' ???
* properties <01BD7A3A.6B187A20.prucha@helicon.co.at>,
<16131.199805071354@potter.cc.keele.ac.uk>
* interfaces (cf. OOE, Java)
* object constants???
* virtual constructors in interfaces (load)???
* VMT problem with interfaces (my solution??? also with dynamic
linking???)
* VMTs (also for local classes (EP modules???)!) in GPI files,
written to assembler file by main program; `--cfiles=foo': .s file
with VMTs for C/assembler??? (also .h???)
* Variables of type pointer to more than one interface [and class]
(also possible!)
* method overloading ??? ??
* class libraries (more or less TV compatible?/Free Vision/EFLIB)
(streams as interface type?)
* method pointers (`procedure/function of object') (-> Delphi) ???
* declare VMT format in Pascal (only Size, NegSize, Parent,
Childs?); <obj>.pVMT ?
* VMT: ClassID (64/128 bits?) default 0, error when duplicated,
warning when 0 and inherited from class with <>0 ?, not allowed
for abstract classes!; ClassName (also for abstract classes?); [];
ProgrammerID, BaseClassID at beginning of unit (redeclarable?) ???
* in VMT: Parent: pVMT, Child: list of pVMT
* for abstract classes: nearly empty VMTs (see VMT format)
* find class by ClassID/ClassName (implementable in Pascal with
`Child')
* object constants, class variables (-> other name for `VMT');
virtual/static
* store in GPI: whether ClassID used, ClassName used, which classes
are instantiated
* `asmname' for methods
File: gpc.info, Node: Planned - Misc, Next: Planned - Utilities, Prev: Planned - OOP, Up: Planned Features
Planned features: Misc
----------------------
* switch to warn about everything that could cause portability
problems
* document all compiler options and switches; make `gpc --help'
output all the options ???
* guarantee full evaluation in `{$B+}', `--borland-pascal mode'
* libraries (static/shared; DLL)
<Pine.HPP.3.96.971110183550.7996B-100000@tea.geophysik.tu-freiberg.de>
* smart linking
* range
<Pine.LNX.4.21.0012091605570.8168-100000@rusty.russwhit.com>,
overflow (right operand of mod <=0 is an error), nil pointer,
string length, object VMT (pointer, negative size field), etc.
checking <199911040915.KAA11168@humulus.daimi.au.dk>; also for
array slice access (miklos1.pas); check that strings converted to
CStrings don't contain #0 characters; initialize strings (length
field), pointers, ordinal values and reals(?) with invalid values
if checking is on
* overloading of unary operators
* warn about assigning the address of a local procedure (variable?)
to a global pointer variable (fjf139.pas) or returning it from a
function
* intel assembler syntax; BP BASM ???
* function overloading (in units and static methods?? - with
different parameters, override or overload?); asmname?? (perhaps:
first occurrence of a procedure with normal asmname (=> all
non-overloaded procedures get normal asmnames)?); cf. Delphi
methods without `override'
* and_else, or_then (names??); guarantee complete evaluation in
`{$B+}' mode
* `?:' (`x := if c then bar else baz')
* C operators (`,', `=', `++'/`--' (pre/post), `+=', ...), as
functions ?
* `for var : type = foo to bar do' ???
* error/exception handling (Java,Delphi?)
<01BD7A3A.6B187A20.prucha@helicon.co.at> (tc20000623)
* RTS checking (libgpc_g), switch?
* simplify math functions
<199708091006.MAA26576@agnes.dida.physik.uni-essen.de>
* variable number of arguments <32F9CFE7.5CB@lmemw.ericsson.se> ??
???
* multithreading support ?? ???
* `--wirth-pascal' :-)
* PXSC standard... (pxsc.zip, /home/peter/pxsc) (??)
* Object Oriented Extensions (Technical Report) (??)
* generic types (cf. OOE section C.1) (gentypes.pas) ???
* default parameters (cf. OOE section C.4; Delphi 4?)
(iniparm[12].pas)
* Pascal++ standard... (??) ???
* allow `procedure foo; inline;'
* compile time assertions ???
* Ignore{Value,Result}/Discard and Swap for arbitrary types
* make operators also available as functions
* `absolute' with automatic type detection; `absolute' procedures
(with automatic parameter detection) ???
* Delphi features: Initialize, Finalize, Slice, TypeInfo ???,
dynamic arrays (tc19991012)
* output column numbers in error messages ??
* warn when `and' and `or' are combined without parentheses
(-Wparentheses; on by default)
* assembler blocks should be considered volatile by default ???
(fh19980829.4)
* BP compatible `Graph' unit
File: gpc.info, Node: Planned - Utilities, Prev: Planned - Misc, Up: Planned Features
Planned features: Utilities
---------------------------
* C header to Pascal translator
* gdb: Pascal types (sets, files, subranges, schemata, strings, ...)
* `indent'-like source code formatter for Pascal
* AT&T <-> Intel assembler syntax converter ???
File: gpc.info, Node: Done, Prev: Planned Features, Up: To Do
Fixed bugs and implemented features
===================================
* Menu:
* Fixed Bugs:: Problems that have been solved
* Implemented Features:: Features that have been implemented